package vistaprincipal;

import java.util.ArrayList;
import java.util.List;

public final class Ejercicio {
    String respuesta;
    String hipotesis;
    List<String> lhipotesis;
    List<String> firmas;
    List<String> atomicas;

//constructores
    Ejercicio (String hipotesis, String respuesta){
    this.respuesta=respuesta;
    this.hipotesis=hipotesis;
    lhipotesis=new ArrayList();
    firmas=new ArrayList();
    atomicas=new ArrayList();
    listarHip();
    listarAtomicas();
    listarFirmas();
    }
    Ejercicio (String hipotesis){
    this.hipotesis=hipotesis;
    lhipotesis=new ArrayList();
    firmas=new ArrayList();
    atomicas=new ArrayList();
    listarHip();
    listarAtomicas();
    listarFirmas();
    }
    public final void listarHip (){
        String aux ="";
        int contador=0;
        lhipotesis.add("");
        for(int i=0;i<hipotesis.length();i++){
           aux=((char)hipotesis.codePointAt(i))+"";
           if(  !",".equals(aux))
             lhipotesis.set(contador,lhipotesis.get(contador)+aux);
           else{
             lhipotesis.add("");
             contador++;
           }
        }
        lhipotesis.remove(lhipotesis.size()-1);
    }
    public void listarFirmas (){
        int aux2=0;
        for(int iLista=0;iLista<lhipotesis.size();iLista++){
            firmas.add(lhipotesis.get(iLista)+"");
            for(int iABC=65;iABC<=90;iABC++){
                firmas.set(iLista,firmas.get(iLista).replace((char)iABC+"",""));
            }            
        }
    }
   public void listarAtomicas (){
     String aux=hipotesis;
      for(int i=0;i<aux.length();i++){
          for(int abc=65;abc<=90;abc++){
              if(aux.codePointAt(i)==abc){
                  atomicas.add((char)abc+"");
                  aux=aux.replaceAll((char)abc+"","");
                  i--;
                  break;
              }
          }
      }
   }
   public boolean compara(Ejercicio ent){
     int tamFirmas=0;
     ent.respuesta=respuesta;
     List<String> auxfirm=new ArrayList();
     auxfirm.addAll(ent.firmas);
     int contador=0;
     
       if (atomicas.size()!=ent.atomicas.size()) {System.out.print("numero de atomica\t"); return false;}//si no tiene el mismo número de atómicas
       if(!firmas.get(firmas.size()-1).equals(auxfirm.get(auxfirm.size()-1))) {System.out.print("conclusi distinta\t"); return false;}//si la conclusion no es igual
       if(firmas.size()!=ent.firmas.size()) {System.out.print("numero de hipotes\t"); return false;}//si no tiene el mismo numero de hipotesis    
       if(hipotesis.length()!=ent.hipotesis.length()) {System.out.print("ent de diff tamañ\t"); return false;}//si la entrada no es del mismo largo
       for(int i=0;i<firmas.size()-1;i++){
           tamFirmas=firmas.size();
           for(int j=0;j<auxfirm.size()-1;j++){
               if(!"$".equals(auxfirm.get(j)))
               if(firmas.get(i).equals(auxfirm.get(j))){
                   String aux=ent.lhipotesis.get(j);
                      for(int k=0;k<aux.length();k++){
                          for(int abc=65;abc<=90;abc++){
                              if(aux.codePointAt(k)==abc){
                                  ent.respuesta=ent.respuesta.replaceAll((char)lhipotesis.get(i+contador).codePointAt(k)+"", ((char)abc+"").toLowerCase());
                                  break;
                              }
                          }
                      }
                   ent.respuesta=ent.respuesta.replaceAll("h"+(i+contador+1),"h&"+(j+1)+"\t");
                   System.out.println("h"+(i+contador+1)+"h&"+(j+1));
                   System.out.println(ent.respuesta);
                   auxfirm.set(j,"$");
                   firmas.remove(i);
                   contador++;
                   i--;
                   break;
               }
           }
           if(tamFirmas==firmas.size())
               return false;
       }
       //todo salio bien y si son iguales
      // for(int i=0;i<atomicas.size();i++){
      //     ent.respuesta=ent.respuesta.replaceAll(atomicas.get(i),ent.atomicas.get(i).toLowerCase());
     //  }
       ent.respuesta=ent.respuesta.replaceAll("&","");
       ent.respuesta=ent.respuesta.toUpperCase();   
       ent.respuesta=ent.respuesta.replaceAll("EQ","Eq\t");
       for (int i=0;i<9;i++){
           ent.respuesta=ent.respuesta.replaceAll("I"+i+"\t","I"+i+"\t\t");
       }
       return true;
   }
}
